package com.example.deepschool.repositories;

import com.example.deepschool.Model.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

/**
 * 用户数据访问接口。
 * 该接口定义了对用户数据进行增、删、改、查等操作的方法。
 */
@Repository
@Mapper
public interface UserRepository {
	
	/**
	 * 插入一个新的用户到数据库。
	 *
	 * @param user 待插入的用户对象。
	 * @return 插入操作影响的行数。
	 */
	Integer insert ( User user );
	
	/**
	 * 根据用户ID删除用户。
	 *
	 * @param id 待删除用户的ID。
	 * @return 删除操作影响的行数。
	 */
	Integer delete ( Long id );
	
	/**
	 * 更新一个现有的用户信息。
	 *
	 * @param user 包含更新信息的用户对象。
	 * @return 更新操作影响的行数。
	 */
	Integer update ( User user );
	
	/**
	 * 更新用户的密码。
	 *
	 * @param user 包含新密码的用户对象。
	 * @return 更新操作影响的行数。
	 */
	Integer updatePassword ( User user );
	
	/**
	 * 根据用户ID查询用户信息。
	 *
	 * @param id 待查询用户的ID。
	 * @return 匹配的用户对象，如果找不到则返回null。
	 */
	User select ( Long id );
	
	/**
	 * 根据用户名查询用户信息。
	 *
	 * @param user 包含用户名的用户对象。
	 * @return 匹配的用户对象，如果找不到则返回null。
	 */
	User selectByUsername ( User user );
	
	/**
	 * 根据用户邮箱查询用户信息。
	 *
	 * @param user 包含用户邮箱的用户对象。
	 * @return 匹配的用户对象，如果找不到则返回null。
	 */
	User selectByEmail ( User user );
	
	/**
	 * 查询具有指定头像URL的用户数量。
	 *
	 * @param avatarUrl 头像URL。
	 * @return 具有指定头像URL的用户数量。
	 */
	Integer selectAvatarCount ( String avatarUrl );
}
